/**
 * 2016年3月18日 下午5:03:36
 * @author huan208050@vip.qq.com
 */
package utils.file;

import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * 2016年3月24日 下午5:03:36
 * 
 * @author liqi
 */
public class DownExcel {

	/**
	 * 
	 * @param title Excel标题
	 * @param headNames 列名称
	 * @param dataNames 对应数据列名称
	 * @param list 数据
	 * @return
	 * 2016年3月24日 下午5:04:56
	 * @auth liqi
	 */
	public static HSSFWorkbook downExcel(String title,String headNames,String dataNames,List<Map<String,Object>> list) {
		
		HSSFWorkbook wb = new HSSFWorkbook();
		// 创建单元格样式
		HSSFCellStyle cellStyleTitle = wb.createCellStyle();
		// 指定单元格居中对齐
		cellStyleTitle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 指定单元格垂直居中对齐
		cellStyleTitle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		// 指定当单元格内容显示不下时自动换行
		cellStyleTitle.setWrapText(true);
		// 设置单元格边框
		cellStyleTitle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
		cellStyleTitle.setBorderRight(HSSFCellStyle.BORDER_THIN);
		cellStyleTitle.setBorderTop(HSSFCellStyle.BORDER_THIN);
		cellStyleTitle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		// 设置单元格字体
		HSSFFont font = wb.createFont();
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		font.setFontName("宋体");
		font.setFontHeight((short) 200);
		cellStyleTitle.setFont(font);

		HSSFSheet sheet = wb.createSheet();
		ExportExcel exportExcel = new ExportExcel(wb, sheet);
		
		String[] headName = headNames.split("\\:");
		for (int i = 0; i < headName.length; i++) {
			sheet.setColumnWidth(i, 5000);// 序号
		}
		int num = 0;
		// 创建报表头部 
		if (!StringUtils.isBlank(title)) {
			num = 1;
			exportExcel.createNormalHead(title, headName.length-1, "Arial",HSSFCellStyle.ALIGN_CENTER);
		}
		// 定义标题行
		HSSFRow row1 = sheet.createRow(num);
		HSSFCell cell1;
		
		for (int i = 0; i < headName.length; i++) {
			cell1 = row1.createCell(i);
			cell1.setCellStyle(cellStyleTitle);
			cell1.setCellValue(new HSSFRichTextString(headName[i]));
		}

		
		if(list != null){
			String[] dataName = dataNames.split("\\:");
			// 定义内容行
			HSSFRow row = sheet.createRow(2);
			HSSFCell cell = row.createCell(1);
			StringBuilder sb = null;
			for (int i = 0; i < list.size(); i++) {
				row = sheet.createRow(i + 2);
				sb = new StringBuilder();
				for(int j = 0; j < dataName.length; j++){
					if(j == 0){
						sb.append(list.get(i).get(dataName[j]));
					}else{
						sb.append(">").append(list.get(i).get(dataName[j]));
					}
					
				}
				
				String[] tabValue = sb.toString().split("\\>");
				HSSFCellStyle cellStyle = wb.createCellStyle();
				for (int x = 0; x < tabValue.length; x++) {
					cell = row.createCell(x);
					// 指定单元格居左对齐
					cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT);
					if (x == 0)
						cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
					// 设置单元格边框
					cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
					cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
					cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
					cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
					// 指定单元格垂直居中对齐
					cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
					// 指定当单元格内容显示不下时自动换行
					cellStyle.setWrapText(true);
					cell.setCellStyle(cellStyle);
					cell.setCellValue(new HSSFRichTextString(tabValue[x]));
				}
			}
		}
		return wb;
	}
}
